export const wait = (ms: number) => {
    return new Promise(resolve => setTimeout(resolve, ms));
}


/**
 * 在指定经纬度周围生成随机坐标点（均匀分布）。
 * - 修复可能的数值类型错误
 * - 增加了参数校验
 * - 优化随机分布算法
 * 
 * @param {number} lat 中心纬度（-90 ~ 90）
 * @param {number} lng 中心经度（-180 ~ 180）
 * @param {number} radius 半径（单位：米）
 * @param {number} count 生成数量（≥1）
 * @returns {Array<{lat: number, lng: number}>} 坐标数组
 * @throws {Error} 参数不合法时抛出错误
 */
export const generateRandomPoints = (
    lat: number,
    lng: number,
    radius: number,
    count: number
): Array<{ lat: number; lng: number }> => {
    // 参数校验
    if (
        typeof lat !== 'number' || typeof lng !== 'number' ||
        typeof radius !== 'number' || typeof count !== 'number' ||
        radius <= 0 || count < 1
    ) {
        throw new Error('Invalid parameters: lat/lng must be numbers, radius > 0, count >= 1');
    }

    if (Math.abs(lat) > 90 || Math.abs(lng) > 180) {
        throw new Error('Latitude must be between -90 and 90, longitude between -180 and 180');
    }

    const result: Array<{ lat: number; lng: number }> = [];
    const r = radius / 6371000; // 将米转换为弧度（地球半径≈6371km）

    for (let i = 0; i < count; i++) {
        // 优化：使用均匀分布的随机角度和距离
        const angle = Math.random() * 2 * Math.PI;
        const distance = Math.sqrt(Math.random()) * r; // sqrt确保均匀分布

        // 计算新坐标（使用弧度计算避免误差）
        const deltaLat = distance * Math.cos(angle);
        const deltaLng = distance * Math.sin(angle) / Math.cos(lat * Math.PI / 180);

        const newLat = lat + deltaLat * (180 / Math.PI);
        const newLng = lng + deltaLng * (180 / Math.PI);

        // 边界检查（防止超出有效范围）
        const clampedLat = Math.max(-90, Math.min(90, newLat));
        const clampedLng = ((newLng + 540) % 360) - 180; // 处理经度环绕

        result.push({
            lat: parseFloat(clampedLat.toFixed(6)),
            lng: parseFloat(clampedLng.toFixed(6))
        });
    }

    return result;
};
